﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using TratamentoRIWikipedia.modelagem;
using System.Diagnostics;

namespace TratamentoRIWikipedia
{
    public partial class frmWikiBusca : Form
    {
        public frmWikiBusca()
        {
            InitializeComponent();
        }

        private void btnPesquisa_Click(object sender, EventArgs e)
        {

            listView.Clear();

            Stopwatch stopWatch = Program.IniMedTempo();
            listView.Clear();

            listView.Items.Add("Aguarde a busca finalizar!");

            listView.Clear();

            string palavrasBuscadas = txbPesquisa.Text;
            Dictionary<string, string> resultadoBusca = new Dictionary<string, string>();

            try
            {
                ColumnHeader header = new ColumnHeader();
                header.Text = string.Empty;
                header.Width = 800;
                listView.Columns.Add(header);

                if (rbBooleana.Checked)
                    resultadoBusca = ModeloBoleano.BuscaBinaria(palavrasBuscadas);

                if (rbVetorial.Checked)
                    resultadoBusca = ModeloVetorial.BuscaVetorial(palavrasBuscadas);


                if (resultadoBusca.Count > 0)
                {
                    //Exibe resultado da Bsuca
                    foreach (KeyValuePair<string, string> termos in resultadoBusca)
                    {
                        int groupIndex = listView.Groups.Add(new ListViewGroup(termos.Key.ToUpper(), HorizontalAlignment.Left));
                        int tamanho = 0;
                        while (tamanho < termos.Value.Length)
                        {
                            ListViewItem lvi;
                            if (tamanho + 150 > termos.Value.Length)
                            {
                                int mod = termos.Value.Length % 100;
                                lvi = new ListViewItem(termos.Value.Substring(tamanho, mod));
                                tamanho += mod;
                            }
                            else
                            {
                                lvi = new ListViewItem(termos.Value.Substring(tamanho, 150));
                                tamanho += 150;
                            }

                            listView.Items.Add(lvi);

                            listView.Groups[groupIndex].Items.Add(lvi);

                            if (tamanho >= 500)
                                break;
                        }
                    }
                }
                else
                    listView.Items.Add("Nenhum Resultado Encontrado");

                listView.Items.Add("Tempo de busca: " + Program.FinazMedTempo(stopWatch, "Tempo de Busca"));
            }
            catch (Exception ex)
            {
                tssMensagem.Text = ex.Message;
                throw ex;
            }
            
        }
    }
}
